home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #1 / Amiga Plus 1995 #1.iso / fish-disketten / fish_941-950 / d949 / bbbbs / bbbbs65.lha / rexx / ArcBrowse.rexx < prev    next >
OS/2 REXX Batch file  |  1993-07-31  |  8KB  |  319 lines

  1. /* $VER: ArcBrowse.rexx 6.2 © 1993 Richard Lee Stockton (31.7.93)
  2. archives user defined browselist into file in users email
  3. it receives its arguments from rexxDoors/Make_BrowseList.rexx
  4. copyright 1991-93 Richard Lee Stockton FREELY DISTRIBUTABLE
  5. */
  6.  
  7. CALL TIME('R')
  8. SIGNAL ON ERROR
  9. SIGNAL ON SYNTAX
  10. OPTIONS FAILAT 999999
  11.  
  12. PARSE ARG name lastbrowse alphaflag libflag liblist 
  13. lastbrowse=STRIP(lastbrowse)
  14.  
  15. CALL CLOSE(STDOUT)
  16. CALL OPEN(STDOUT,'RAM:ArcBrowse.STDOUT','W')
  17. SAY STRIP(SUBSTR(SOURCELINE(1),3))
  18. SAY
  19.  
  20. IF ~DATATYPE(lastbrowse,'N') | name='' | alphaflag='' | libflag='' | liblist='' THEN
  21.   CALL GETOUT(20)
  22.  
  23. figarg='s:CONFIG.BBS'
  24. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  25. x=OPEN(f,figarg,'R')
  26. IF x=0 THEN
  27.   DO
  28.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  29.     CALL GETOUT(21)
  30.   END
  31. lynes.=''
  32. DO i=1 TO 33
  33.   lynes.i=READLN(f)
  34. END
  35. CALL CLOSE(f)
  36.  
  37. compos=POS('/*',lynes.1)
  38. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  39. bbsname = STRIP(lynes.1)
  40.  
  41. sysop   = WORD(lynes.2,1)
  42.  
  43. bbspath = WORD(lynes.6,1)
  44. IF ~EXISTS(bbspath) THEN
  45.   DO
  46.     SAY bbspath 'does not exist!'
  47.     CALL GETOUT(22)
  48.   END
  49. testchar=RIGHT(bbspath,1)
  50. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  51.  
  52. DO i=1
  53.   IF GETCLIP('BBS_BROWSE'i)='' THEN  /* info clip for external STOP */
  54.     DO
  55.       CALL SETCLIP('BBS_BROWSE'i,name)
  56.       CALL SETCLIP('BBS_STOP_BROWSE'i)
  57.       clipnum=i
  58.       LEAVE i
  59.     END
  60. END
  61.  
  62. CALL PRAGMA('P',-4)         /* lower the priority of this task */
  63.  
  64. extension=WORD(lynes.32,1)
  65. compos=POS('/*',lynes.33)
  66. IF compos>0 THEN lynes.33=LEFT(lynes.33,compos-1)
  67. arccom=STRIP(lynes.33)
  68. IF LEFT(extension,1)~='.' THEN
  69.   DO
  70.     extension='.lzh'
  71.     arccom='lha -m m'
  72.   END
  73.  
  74. filepath=bbspath'EmailFiles/'name
  75. CALL MAKEDIR(filepath)
  76. IF GETCLIP('BBS_'name)~='' THEN browsename=filepath'/FileList'
  77. ELSE
  78.   DO
  79.     x=OPEN(f,bbspath'Numbers/LastMail','R')
  80.     IF x~=0 THEN lastm=READLN(f)+1
  81.     CALL CLOSE(f)
  82.     ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastMail 'lastm
  83.     browsename=filepath'/BBBBS_'lastm
  84.   END
  85. filelistname=bbspath'Lists/Files'
  86. filelist.=''
  87. x=OPEN(f,filelistname,'R')
  88. IF x=0 THEN CALL GETOUT(23)
  89. DO i=1
  90.   line=READLN(f)
  91.   IF EOF(f) THEN LEAVE i
  92.   indx=WORD(line,1)
  93.   IF DATATYPE(indx,'N') THEN filelist.indx=line
  94. END
  95. filelist.0=indx
  96. CALL CLOSE(f)
  97. numba=filelist.0
  98.  
  99. IF alphaflag='A' THEN
  100.   DO
  101.     filelistname=filelistname'.ALPHA'
  102.     alphalist.=''
  103.     x=OPEN(f,filelistname,'R')
  104.     IF x=0 THEN CALL GETOUT(24)
  105.     DO i=1
  106.       line=READLN(f)
  107.       IF EOF(f) THEN LEAVE i
  108.       alphalist.i=line
  109.     END
  110.     alphalist.0=i-1
  111.     CALL CLOSE(f)
  112.     numba=alphalist.0
  113.   END
  114.  
  115. oldt=0
  116. count=0
  117. archives=1
  118. CALL open_browse()
  119.  
  120. IF libflag='A' THEN CALL noteloop(1)
  121. ELSE IF libflag='L' THEN
  122.   DO j=1 TO WORDS(liblist)
  123.     test1=WORD(liblist,j)
  124.     CALL noteloop(0)
  125.   END
  126.  
  127. IF WORD(STATEF(browsename),2)<80 THEN CALL GETOUT(26)
  128. IF GETCLIP('BBS_'name)~='' THEN CALL GETOUT(0)
  129. CALL write_msg()
  130. CALL GETOUT(0)
  131. EXIT
  132.  
  133.  
  134.  
  135. add_note:
  136. ARG addname
  137. count=count+1
  138. IF count//5=0 THEN
  139.   DO
  140.     t=GETCLIP('BBS_STOP_BROWSE'clipnum)
  141.     IF t~='' THEN CALL cleanup(t)
  142.   END
  143. finfo=STATEF(browsename)
  144. IF WORD(finfo,2)>1400000 THEN
  145.   DO
  146.     CALL write_msg()
  147.     archives=archives+1
  148.     x=OPEN(a,browsename,'A')
  149.     IF x=0 THEN CALL GETOUT(33)
  150.     CALL WRITELN(a,CENTER('=== continued in part' archives'. ===',75))
  151.     CALL CLOSE(a)
  152.     CALL DELAY(50)
  153.     IF GETCLIP('BBS_'name)~='' THEN
  154.       DO
  155.         IF EXISTS('FileList') THEN CALL RENAME('FileList','List1')
  156.         browsename=filepath'/List'archives
  157.       END
  158.     ELSE
  159.       DO
  160.         x=OPEN(f,bbspath'Numbers/LastMail','R')
  161.         IF x~=0 THEN lastm=READLN(f)+1
  162.         ELSE lastm=lastm+1
  163.         CALL CLOSE(f)
  164.         ADDRESS COMMAND 'echo >'bbspath'Numbers/LastMail 'lastm
  165.         browsename=filepath'/BBBBS_'lastm
  166.       END
  167.     CALL open_browse()
  168.   END
  169. x=OPEN(a,browsename,'A')
  170. IF x=0 THEN CALL GETOUT(30)
  171. CALL WRITELN(a,'=====')
  172. x=OPEN(b,addname,'R')
  173. IF x=0 THEN CALL WRITELN(a,addname 'failed to open for reading!')
  174. ELSE
  175.   DO
  176.     data=READCH(b,65000)
  177.     CALL CLOSE(b)
  178.     CALL WRITECH(a,data)
  179.   END
  180. CALL WRITELN(a,'')
  181. CALL CLOSE(a)
  182. RETURN
  183.  
  184.  
  185. write_msg:
  186. IF GETCLIP('BBS_'name)~='' THEN RETURN
  187. CALL PRAGMA('P',0)         /* normal priority */
  188. ADDRESS COMMAND arccom browsename||extension browsename
  189. IF ~EXISTS(browsename||extension) THEN CALL GETOUT(27)
  190. CALL PRAGMA('P',-4)
  191. x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'W')
  192. IF x=0 THEN CALL GETOUT(28)
  193. CALL WRITELN(f,' Mail: 'lastm'   FILE: BBBBS_'lastm||extension)
  194. CALL WRITELN(f,' From: BBBBS')
  195. CALL WRITELN(f,'   To: 'name)
  196. temp='BrowseList'
  197. IF WORD(finfo,2)>1400000 THEN temp=temp', part' archives
  198. CALL WRITELN(f,' Subj:' temp)
  199. CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  200. CALL WRITELN(f,LEFT('=',75,'='))
  201. temp='Here are the file descriptions you requested'
  202. IF WORD(finfo,2)>1400000 THEN temp=temp', part' archives
  203. CALL WRITELN(f,temp'.')
  204. t=(.5+TIME('E'))%1
  205. t=t-oldt
  206. oldt=t+oldt
  207. min=t%60
  208. hrs=min%60
  209. min=min//60
  210. sec=t//60
  211. temp='It took'
  212. IF hrs>1 THEN temp=temp hrs 'hours'
  213. ELSE IF hrs=1 THEN temp=temp '1 hour'
  214. IF min>1 THEN temp=temp min 'minutes'
  215. ELSE IF min=1 THEN temp=temp '1 minute'
  216. IF sec=1 THEN temp=temp '1 second'
  217. ELSE IF sec>0 THEN temp=temp sec 'seconds'
  218. temp=temp 'to compile these descriptions.'
  219. CALL WRITELN(f,temp)
  220. CALL CLOSE(f)
  221. IF GETCLIP('BBS_level')~='' & WORD(GETCLIP('BBS_lastcaller'),1)=name THEN
  222.   DO
  223.     oldmess=GETCLIP('BBS_MESSAGE')
  224.     IF oldmess~='' THEN oldmess=oldmess||'0D0A'x
  225.     CALL SETCLIP('BBS_MESSAGE',oldmess||'Your archived filelist is waiting in Email.')
  226.   END
  227. RETURN
  228.  
  229.  
  230. open_browse:
  231. x=OPEN(a,browsename,'W')
  232. IF x=0 THEN CALL GETOUT(25)
  233. IF alphaflag='A' THEN temp='alphabetical'
  234. ELSE temp='aged'
  235. title='=' bbsname temp 'file descriptions'
  236. IF libflag='L' THEN title=title 'by library'
  237. IF archives>1 THEN title=title', part' archives
  238. CALL WRITELN(a,title)
  239. CALL WRITELN(a,'= Custom archived for' name'  'DATE() TIME('C'))
  240. CALL WRITELN(a,'')
  241. CALL CLOSE(a)
  242. IF GETCLIP('BBS_'name)='' THEN
  243.   DO
  244.     x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'W')
  245.     IF x=0 THEN CALL GETOUT(28)
  246.     CALL WRITELN(f,' Mail: 'lastm'   FILE: BBBBS_'lastm)
  247.     CALL WRITELN(f,' From: BBBBS')
  248.     CALL WRITELN(f,'   To: 'name)
  249.     CALL WRITELN(f,' Subj: BrowseList')
  250.     CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  251.     CALL WRITELN(f,LEFT('=',75,'='))
  252.     CALL WRITELN(f,'Here are the file descriptions you requested.')
  253.     CALL WRITELN(f,'The collection process was interrupted.')
  254.     CALL CLOSE(f)
  255.   END
  256. RETURN
  257.  
  258.  
  259. noteloop:
  260. ARG nflag .
  261. IF alphaflag='A' THEN
  262.   DO i=1 TO numba
  263.     k=i
  264.     k=STRIP(WORD(alphalist.i,3))
  265.     IF filelist.k='' | lastbrowse>=k THEN ITERATE i
  266.     lname=WORD(filelist.k,2)
  267.     fname=WORD(filelist.k,3)
  268.     IF nflag THEN
  269.       DO
  270.         IF FIND(UPPER(liblist),UPPER(lname))=0 THEN ITERATE i
  271.       END
  272.     ELSE IF UPPER(test1)~=UPPER(lname) THEN ITERATE i
  273.     CALL add_note(bbspath'FileNotes/'lname'/'fname)
  274.   END
  275. ELSE
  276.   DO i=numba TO 1 BY -1
  277.     IF filelist.i='' | lastbrowse>=i THEN ITERATE i
  278.     lname=WORD(filelist.i,2)
  279.     fname=WORD(filelist.i,3)
  280.     IF nflag THEN
  281.       DO
  282.         IF FIND(UPPER(liblist),UPPER(lname))=0 THEN ITERATE i
  283.       END
  284.     ELSE IF UPPER(test1)~=UPPER(lname) THEN ITERATE i
  285.     CALL add_note(bbspath'FileNotes/'lname'/'fname)
  286.   END
  287. RETURN
  288.  
  289.  
  290. cleanup:
  291. ARG t2 .
  292. SAY 'User aborted!'
  293. IF t2='DELETE' THEN
  294.   DO
  295.     IF GETCLIP('BBS_'name)~='' THEN
  296.       DO
  297.         CALL DELETE(bbspath'EmailFiles/'name'/FileList')
  298.         ADDRESS COMMAND 'c:delete' bbspath'EmailFiles/'name'/List#?'
  299.       END
  300.     ELSE ADDRESS COMMAND 'c:delete' LEFT(browsename,LENGTH(browsename)-4)'#?'
  301.   END
  302. CALL GETOUT(0)
  303. RETURN
  304.  
  305.  
  306. ERROR:
  307. SYNTAX:
  308.  
  309. GETOUT:
  310. ARG errorout
  311. CALL SETCLIP('BBS_BROWSE')
  312. CALL SETCLIP('BBS_BROWSE'clipnum)
  313. CALL SETCLIP('BBS_STOP_BROWSE'clipnum)
  314. IF errorout>0 THEN SAY 'ArcBrowse error' errorout'!'
  315. EXIT(errorout)
  316.  
  317.  
  318. /* ArcBrowse.rexx */
  319.